#pragma once

#include "logger.hpp"
#include <string>
#include <memory>  // std::auto_ptr
#include <cstdlib> // std::exit
#include <iostream>
#include <odb/database.hxx>
#include <odb/mysql/database.hxx>

// 用户注册 用户登录 验证码获取 手机号注册/登录  获取用户信息   用户信息修改
// 用户信息新增，通过昵称获取用户信息，通过手机号获取用户信息 通过用户id获取 ，多个id 获取多个用户信息

namespace bite_im {

class ODBFactory
{
public:
    static std::shared_ptr<odb::core::database> create(const std::string &user, 
                                                       const std::string &pswd, 
                                                       const std::string &host, 
                                                       const std::string &db, 
                                                       const std::string &cset, 
                                                       int port, int conn_poll_count)
    {
        // 1. 构造连接池工厂配置对象
        std::unique_ptr<odb::mysql::connection_pool_factory> cpf(new odb::mysql::connection_pool_factory(conn_poll_count, 0));
        // 2. 构造数据库操作对象
        auto res = std::make_shared<odb::mysql::database>(user, pswd, db, host, port, "", cset, 0, std::move(cpf));
        // 3. 获取事务对象开启事务
        return res;
    }
};

}